#pragma once

// 支持 C 和 C++（虽主要用于 C++，但保持健壮性）
#ifdef __cplusplus
#define LY_EXTERN_C extern "C"
#else
#define LY_EXTERN_C
#endif

#if defined(_WIN32) || defined(__CYGWIN__)
#ifdef BUILDING_LY
#define LY_API __declspec(dllexport)
#define LY_API_TEMPLATE __declspec(dllexport)
#else
#define LY_API __declspec(dllimport)
#define LY_API_TEMPLATE __declspec(dllimport)
#endif
#define LY_LOCAL /* symbol hiding not supported on Windows */

#else  // Linux, macOS, etc.

#if defined(__GNUC__) || defined(__clang__)
#define LY_API __attribute__((visibility("default")))
#define LY_API_TEMPLATE __attribute__((visibility("default")))
#define LY_LOCAL __attribute__((visibility("hidden")))
#else
#define LY_API
#define LY_API_TEMPLATE
#define LY_LOCAL
#endif

#endif
